/***
 * @Author: LVGRAPE
 * @Date: 2022-08-24 10:18:04
 * @LastEditTime: 2022-08-24 10:19:21
 * @LastEditors: LVGRAPE
 * @Description:
 * @FilePath: \PWM_TEST\USER\softpwm.h
 * @可以输入预定的版权声明、个性签名、空行等
 */

#ifndef __SOFTPWM_H_
#define __SOFTPWM_H_
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

    typedef struct {
        unsigned int cnt;
        unsigned int set;
        unsigned char on : 1;
        unsigned char flip : 1;
    }softPwm_t;

#define newPwm(x) xdata uint16_t cnt_##x=0;xdata uint16_t set_##x=musicalScalFreq[x + 4] / 100;xdata char on_##x=0;xdata char flip_##x=0
#define sotpwmUpdate(x) cnt_##x = cnt_##x+1;\
if(cnt_##x ==  set_##x)\
{\
	cnt_##x = 0;\
	flip_##x=!flip_##x;\
}\
on_##x=(keyStatus>>(x)) &0x01;\
SPEAKER_PIN = on_##x?flip_##x:SPEAKER_PIN;
// newPwm(0);
	// newPwm(1);
	// newPwm(2);
	// newPwm(3);
	// newPwm(4);
	// newPwm(5);
	// newPwm(6);
	// newPwm(7);
	// newPwm(8);
	// newPwm(9);
	// newPwm(10);
	// newPwm(11);
	// newPwm(12);
	// newPwm(13);
	// newPwm(14);
    // sotpwmUpdate(0);
		// sotpwmUpdate(1);
		// sotpwmUpdate(2);
		// sotpwmUpdate(3);
		// sotpwmUpdate(4);
		// sotpwmUpdate(5);
		// sotpwmUpdate(6);
		// sotpwmUpdate(7);
		// sotpwmUpdate(8);
		// sotpwmUpdate(9);
		// sotpwmUpdate(10);
		// sotpwmUpdate(11);
		// sotpwmUpdate(12);
		// sotpwmUpdate(13);
		// sotpwmUpdate(14);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif //__SOFTPWM_H_
